package com.spark.WorCount

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark_WordCount_Scala {
  def main(args: Array[String]): Unit = {
    //1、建立和Spark框架的连接 创建SparkContext
    val sparkConf=new SparkConf()
      .setAppName("WordCount")//设置任务名称
      .setMaster("local")//local表示在本地执行
    val sc=new SparkContext(sparkConf)
    //2、加载数据
    var path="datas/1.txt";
    if(args.length==1){
      path=args(0)
    }
    //通过textFile()方法 RDD中保存的是文件中每一行数据
    val lines:RDD[String]=sc.textFile(path)
    //3、数据切分：单词拆分（将一行数据拆分为多个单词）通过flatMap算子对linesRDD进行转换--没有触发Spark任务
    val words:RDD[String]=lines.flatMap(_.split(" "))
    //4、迭代words，将words中的每一个word转化为（word，1）获得逻辑上的pairRDD--没有触发Spark任务
    val pairRDD:RDD[(String,Int)]=words.map((_,1))
    //5、根据Key(word)进行分组聚合统计 获得逻辑上的wordCountRDD--没有触发Spark任务
    val wordCountRDD:RDD[(String,Int)] = pairRDD.reduceByKey(_ + _)
    //6、输出统计结果--执行action算子操作，出发了之前多有的transformation算子的执行--任务才算是真正的执行
    wordCountRDD.foreach(wordCount=>println(wordCount._1+":"+wordCount._2))
    //7、关闭连接,停止SparkContext
    sc.stop()
  }
}
